//package com.mes.common.util;
//
///*
// * ��ʱӦ�� doradocontext,
// * �Ժ�Ӧ����������doradset
// * todo
// * 
// */
//import java.io.DataOutputStream;
//import java.io.IOException;
//import java.io.OutputStream;
//import java.net.Socket;
//import java.net.UnknownHostException;
//import java.sql.ResultSet;
//import java.sql.SQLException;
//import java.util.Date;
//import java.util.concurrent.ExecutorService;
//import java.util.concurrent.Executors;
//
//import javax.naming.NamingException;
//import javax.transaction.UserTransaction;
//
//import org.apache.commons.logging.Log;
//import org.apache.commons.logging.LogFactory;
//
//import com.bstek.dorado.common.DoradoContext;
//import com.bstek.dorado.common.HttpDoradoContext;
//import com.mes.common.mm.DBHandler;
//import com.mes.common.property.IProjectProperty;
//import com.mes.common.spring.SpringUtils;
//import com.mes.system.dao.SysClientHostInfoDao;
//import com.mes.system.domain.MesMessage;
//import com.mes.system.domain.MessageContent;
//import com.mes.system.domain.SysClientHostInfo;
///*import com.mes.system.Dao.iface.SysClientHostInfoDao;
//import com.mes.system.manager.iface.MessageManager;
//import com.mes.system.manager.impl.DeviceMessageSender;
//import com.mes.system.persistence.domain.Message;
//import com.mes.system.persistence.domain.MessageContent;
//import com.mes.system.persistence.domain.SysClientHostInfo;
//*/
//public class MMUtils {
//	private static final Log log = LogFactory.getLog(MMUtils.class);
//	public final static Date MIN_DATE = new Date(0);
//
//	public final static Date MAX_DATE = new Date(9999999999999L);
//
//	public final static String MM_SYS_ADMIN = "admin";
//	public final static String MM_VIRTUAL_CODEPT = "CWXZ";
//
//	public static final ThreadLocal<MMSystemSession> systemSessionLocal = new ThreadLocal<MMSystemSession>();
//
//	// public static IProjectProperty projectProperty = (IProjectProperty)
//	// SpringUtils
//	// .getBean("projectProperty");
//
//	// ���ڶԷ����ڵ��߳̽��й���
//	private static ExecutorService executorService;
//
//	/**
//	 * ����漰�����ݿ����ӳأ���ò�Ҫ�ô˷��� ��������ӷ籩 ������15���߳� lqm todo
//	 * 
//	 * @return
//	 */
//	public static ExecutorService getExecutorService() {
//		if (executorService == null) {
//			// executorService = Executors.newCachedThreadPool();
//			// lqm todo
//			// �̶�ռ�����ӳ�
//			executorService = Executors.newFixedThreadPool(30);
//
//		}
//
//		return executorService;
//	}
//
//	// static
//	// {
//	// jtaTransactionManager
//	// }
//	//	
//
//	public static Object getSessionAttribute(String attributeName) {
//		return DoradoContext.getContext().getAttribute(DoradoContext.SESSION,
//				attributeName);
//
//	}
//
//	/**
//	 * 1��ʶrequest��Ч ����padsession���⣬��ʱ��������session
//	 * 
//	 * @param employeeId
//	 */
//	public static void setSessionEmployeeId(String employeeId) {
//		if (employeeId != null && employeeId.length() > 0)
//			DoradoContext.getContext().setAttribute(DoradoContext.SESSION,
//					"employeeId", employeeId);
//	}
//
//	public static void setSessionDeptId(String deptId) {
//		DoradoContext.getContext().setAttribute(DoradoContext.SESSION,
//				"deptId", deptId);
//	}
//
//	public static String getSessionEmployeeId() {
//
//		MMSystemSession systemSession = systemSessionLocal.get();
//		if (systemSession != null)
//			return systemSession.getEmployeeId();
//
//		String employeeId = (String) DoradoContext.getContext().getAttribute(
//				DoradoContext.SESSION, "employeeId");
//		// ���������ʱ�����е�session�����أ�
//		// ��ʱ�ر�
//		// if(employeeId==null || employeeId.equals(""))
//		// throw new RuntimeException("�ỰʧЧ�������µ�¼��");
//		return employeeId;
//
//	}
//
//	public static MMSystemSession createMMSystemSession() {
//		MMSystemSession systemSession = new MMSystemSession();
//		systemSession.setDeptId(MMUtils.getSessionDeptId());
//		systemSession.setEmployeeId(MMUtils.getSessionEmployeeId());
//		systemSession.setRoleId(MMUtils.getSessionRoleId());
//
//		return systemSession;
//	}
//
//	public static String getSessionDeptId() {
//
//		MMSystemSession systemSession = systemSessionLocal.get();
//		if (systemSession != null)
//			return systemSession.getDeptId();
//
//		String deptId = (String) DoradoContext.getContext().getAttribute(
//				DoradoContext.SESSION, "deptId");
//		// ���������ʱ�����е�session�����أ�
//		// ��ʱ�ر�
//		// if(deptId==null || deptId.equals(""))
//		// throw new RuntimeException("�ỰʧЧ�������µ�¼��");
//
//		return deptId;
//
//	}
//
//	/**
//	 * ��ȡSession�еĽ�ɫ��Ϣ
//	 * 
//	 * @return
//	 */
//	public static String getSessionRoleId() {
//
//		MMSystemSession systemSession = systemSessionLocal.get();
//		if (systemSession != null)
//			return systemSession.getRoleId();
//
//		String roleId = (String) DoradoContext.getContext().getAttribute(
//				DoradoContext.SESSION, "roleId");
//		// ���������ʱ�����е�session�����أ�
//		// ��ʱ�ر�
//		// if(deptId==null || deptId.equals(""))
//		// throw new RuntimeException("�ỰʧЧ�������µ�¼��");
//		return roleId;
//
//	}
//
//	public static Object getRequestAttribute(String attributeName) {
//		HttpDoradoContext context = (HttpDoradoContext) DoradoContext
//				.getContext();
//		return context.getRequest().getParameter(attributeName);
//
//	}
//
//	public static String getRemoteHost() {
//		HttpDoradoContext context = (HttpDoradoContext) DoradoContext
//				.getContext();
//		return context.getRequest().getRemoteHost();
//
//	}
//
//	/**
//	 * ���ĳһ����ĳһ������Ӧ�Ĳ�����Ϣ
//	 * 
//	 * @param sysOperationUid
//	 *            ���ܱ��
//	 * @param hostIp
//	 *            ����ip��ַ
//	 * @return
//	 */
//	public static String getHostDept(String sysOperationUid) {
//		SysClientHostInfoDao sysClientHostInfoDao = (SysClientHostInfoDao) SpringUtils
//				.getBean("sysClientHostInfoDao");
//
//		String remoteHostIp = MMUtils.getRemoteHost();
//		if (remoteHostIp != null && remoteHostIp.length() > 0) {
//			SysClientHostInfo sysClientHostInfo = sysClientHostInfoDao
//					.getSysClientHostInfo("CHECKTASK_DRAW", remoteHostIp);
//			if (sysClientHostInfo != null) {
//				String deptUid = sysClientHostInfo.getDeptUid();
//				if (deptUid != null && deptUid.length() > 0)
//					return deptUid;
//			}
//		}
//		return null;
//
//	}
//
//	public static String getServerIpAndPort() {
//		HttpDoradoContext context = (HttpDoradoContext) DoradoContext
//				.getContext();
//		return "HTTP://" + context.getRequest().getServerName() + ":"
//				+ context.getRequest().getServerPort();
//
//	}
//
//	public static String getMMFileAddress() {
//		// Ӧ�÷��������ļ���
//		return getServerIpAndPort() + "/MESFILE";
//	}
//
//	// �ҵ�����Ա�ķ��񳵼�
//	/**
//	 * ��ȡĳһ���ŵķ��񳵼�
//	 */
//	public static String getServiceDeptId(String deptId) {
//		String sql = "select d.servicedeptid from r_dept_function d where d.deptid = ? and rownum = 1";
//		DBHandler dbHandler = new DBHandler();
//		try {
//			dbHandler.getConn();
//			dbHandler.createPreparedStatement(sql);
//			dbHandler.stmt.setString(1, deptId);
//			ResultSet resultSet = dbHandler.getResultSet();
//			if (resultSet.next()) {
//				return resultSet.getString("servicedeptid");
//			}
//		} catch (SQLException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		} catch (NamingException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		} finally {
//			dbHandler.close();
//		}
//		return null;
//	}
//
//	public static UserTransaction getUserTransaction() throws Exception {
//
//		// JtaTransactionManager jtaTransactionManager = (JtaTransactionManager)
//		// SpringUtils
//		// .getBean("mmTransactionManager");
//		// UserTransaction ut = jtaTransactionManager.getUserTransaction();
//		// ut.setTransactionTimeout(300);
//		// return ut;
//
//		javax.naming.InitialContext initContext;
//		UserTransaction ut;
//		try {
//			initContext = new javax.naming.InitialContext();
//			ut = (javax.transaction.UserTransaction) initContext
//					.lookup("java:comp/UserTransaction");
//		} catch (Exception e) {
//			throw new Exception("������ʧ�ܣ�");
//		}
//
//		return ut;
//	}
//
//	public static void sendMessage(String destEmployeeUid, String content) {
//		try {
//
//			if (destEmployeeUid == null || content == null)
//				return;
//
//			MessageManager messageManager = (MessageManager) SpringUtils
//					.getBean("messageManager");
//
//			MesMessage message = new MesMessage();
//			String fromE = MMUtils.getSessionEmployeeId();
//			if (fromE == null)
//				fromE = "admin";
//			message.setFromEmployeeId(fromE);
//			message.setSendTime(new Date());
//			message.setToEmployeeId(destEmployeeUid);
//
//			MessageContent messageContent = new MessageContent();
//			messageContent.setMessageContentUid(IdentityGenerator
//					.GetIdentityString());
//			// TODO
//			// .substring(0,100)
//			messageContent.setTopic(content);
//			messageContent.setContent(content);
//
//			// message.setMessageContentUid(messageContent.getUuid());
//			message.setMessageContent(messageContent);
//			// messageContentManager.add(messageContent);
//
//			messageManager.sendMessage(message);
//
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//
//	}
//
//	// ���������̷߳��������������߳�
//	public static void sendDeviceMessage(String deviceUid, String content,
//			boolean needAlert) {
//		try {
//			DeviceMessageSender deviceMessageSender = new DeviceMessageSender(
//					deviceUid, content, needAlert);
//			getExecutorService().submit(deviceMessageSender);
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//
//	}
//
//	/**
//	 * ��ȡ��ϵͳProperties�ļ������õĲ���
//	 * 
//	 * @param name
//	 * @return
//	 */
//	public static String getProperty(String name) {
//		String propertyValue = null;
//		// //�Ȳ��þ�̬������߷����ٶ�
//		//		
//		// propertyValue=mmProperty.getProperty(name);
//
//		// ��̬�������Ч��
//		try {
//			// lqm todo ,��仰����������о�Ȼ����
//			IProjectProperty projectProperty = (IProjectProperty) SpringUtils
//					.getBean("projectProperty");
//			propertyValue = projectProperty.getPropertyValue(name);
//
//			if (propertyValue == null)
//				return null;
//			propertyValue = new String(propertyValue.getBytes("ISO-8859-1"),
//					"UTF-8");
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			log.error("������ȡ��������" + name, e);
//		}
//		return propertyValue;
//	}
//
//	public static String getReportPreUrl() {
//		String reportPreUrl = null;
//
//		String reportServerAddress = getReportServerAddress();
//
//		if (reportServerAddress != null && reportServerAddress.length() > 0)
//			reportPreUrl = reportServerAddress
//					+ "/mm/mmreport?op=frameReplet&name=";
//
//		return reportPreUrl;
//
//	}
//
//	public static String getReportServerAddress() {
//
//		// String reportServerAddress =
//		// getProperty("system.reportServerAddress");
//		// �ȸ���Ч�ʽϵ͵ľ�̬��������������û��޸ĵ������
//		String reportServerAddress = getProperty("system.reportServerAddress");
//		// if(reportServerAddress!=null&&reportServerAddress.length()>0)
//		return reportServerAddress;
//		// getServerIpAndPort
//		// getProperty
//	}
//
//	/**
//	 * ��ĳ���豸�ն˷���Ϣ ������synchronized����ֹ���߳��뷢��socket������ͬʱ����
//	 * 
//	 * @param deviceUid
//	 * @param messageCount
//	 *            alert
//	 */
//	public synchronized static void notifyBySocket(String ip, Integer port,
//			String content, boolean needAlert) {
//		// ע����̳߳����У�session�᲻�ܹ���Ŷ
//
//		if (ip == null)
//			return;
//		if (port == null)
//			port = 12345;
//		Socket socket = null;
//		try {
//
//			socket = new Socket(ip, port);
//			OutputStream netOut = socket.getOutputStream();
//			DataOutputStream doc = new DataOutputStream(netOut);
//			// ��������˵ڶ��η����ַ���
//			if (needAlert)
//				content = "*" + content;
//			doc.writeUTF(String.valueOf(content));
//			doc.close();
//		} catch (UnknownHostException e) {
//			e.printStackTrace();
//		} catch (IOException e) {
//			e.printStackTrace();
//		} finally {
//			if (socket != null) {
//				try {
//					socket.close();
//				} catch (IOException e) {
//				}
//			}
//		}
//
//	}
//
//	/**
//	 * ���Ե����ò����Ƿ���������õĳ�������б��� author ChanLueng, create
//	 * 
//	 * @param deptUid
//	 * @param propertyName
//	 * @return
//	 */
//	public static boolean isDeptExist(String deptUid, String propertyName) {
//		boolean isDeptExist = false;
//		try {
//			String strDept = MMUtils.getProperty(propertyName);
//			if (strDept != null && strDept.length() > 0) {
//				String[] aDept = strDept.split(",");
//				for (String str : aDept) {
//					if (deptUid.startsWith(str)) {
//						isDeptExist = true;
//						break;
//					}
//				}
//			}
//		} catch (RuntimeException e) {
//			log.error("�жϲ����Ƿ��ڲ����б��г��ִ���", e);
//		}
//		return isDeptExist;
//	}
//
//	public static void main(String[] args) {
//		MMUtils.notifyBySocket("192.168.100.147", 12345, "test", true);
//
//	}
//
//}
